ESP |
您所在的位置:网站首页 › espressif esptouch › ESP |
1. 概述
ESP-TOUCH是Espressif公司自主研究的一键智能配网工具,帮助用户将使用ESP8266的硬件产品连接Wi-Fi网络。用户只需在手机上配合硬件产品进行简单的操作即可实现智能配网连接Wi-Fi路由。 目前app是开源的,Android和ios代码均可在github上下载到,设备端RTOS版本SDK和NON_OS版本SDK使用同样的ESP-TOUCH。下载地址如下: 安卓版 https://github.com/EspressifApp/ESP-TOUCHForAndroid 最新版本:0.3.4.5 ios版 https://github.com/EspressifApp/ESP-TOUCHForIOS 最新版本:0.3.5.1 正式版app也可以各大应用市场下载到。同时ESP-TOUCH用户指南手册可在Espressif官网下载到,目前最新版本为30b-esp-touch_user_guide_cn_v1.1_20160412.pdf。目前官方对ESP-TOUCH持续优化中,应用时请使用最新版本的代码。 ESP-TOUCH的设备端解码Espressif没有开源,提供的是一个smartconfig.a文件,但提供了sniffer接口供需要自己开发的键配网协议的用户使用。sniffer接口使用指南也可在Espressif官网下载到,详见esp8266-technical_reference_cn.pdf的第14章《sniffer应用设计说明》以及20a-esp8266_rtos_sdk_programming_guide_cn.pdf的第4部分《sniffer结构体说明》。 2. ESP-TOUCH编码原理由于设备一开始并未连接Wi-Fi网络,ESP-TOUCH无法直接向设备发送数据,ESP-TOUCH只能通过向手机当前接入的AP发送一系列UDP包,其中每一包的长度(Length字段)都按照ESP-TOUCH的通讯协议编码,SSID和密码就包含在Length字段中 受MTU长度限制,一个udp数据包Length最大只能传输10bit数据(最大1500byte),而udp数据包长度和丢包率/乱序率成正比,即数据包长度越长,丢包率/乱序率越高,所有一般将最大数据包长度限制在9bit以内 此时设备应工作在在混杂模式下,才能接收到ESP-TOUCH发送的数据包.在混杂模式下,设备将收到当前环境下所有环境下所有Wi-Fi设备(AP/STATION)数据,需要通过一定的算法,才能正确的识别到ESP-TOUCH的数据包. 3. ESP-TOUCH编码ESP-TOUCH编码由”GuideCode”+”DatumData”+”Data”3部分组成 1) GuideCode: GuideCode由515/514/513/512组成,4包为一组,需要连续发送10组以上;通过Wireshark抓包发现ESP-TOUCH官方APP不同版本,发送的前导码数量并不完全一致 App版本 循环发送数量 前导码重复规律 Android版ESP-TOUCH 10组 25组数据后重复发送10组 IOS版ESP-TOUCH 39组 98组数据后重复发送39组 Android版IOT Espressif 11组 25组数据后重复发送10组/9组 IOS版IOT Espressif 39组 98组数据后重复发送39组 Android版ESP-TOUCH IOS版ESP-TOUCH Android版IOT Espressif
IOS版IOT Espressif
2) DatumData: DatumData由5部分组成,分别为”totaldata_len” + ”password_len” + ”ssid_crc8” + “bssid_crc8” + “total_data xor”; ① totaldata_len:总数据长度1字节; 固定5字节DatumData + ip地址长度+ password_len + [ssid_len];其中:ssid_len需要根据当前网络是否隐藏判断是否需要加入;如app上选择为隐藏才需要加入 ② password_len:密码长度1字节 ③ ssid_crc8:ssid的crc8结果1字节 ④ bssid_crc8:bssid的crc8结果1字节 ⑤ total_data xor:全部数据异或结果1字节 ⑥ 如当前ssid是隐藏网络,totaldata_len须加ssid_len;同时Data区也须加ssid;否则不加此2项内容;但total_data xor必须加入ssid计算xor; crc8采用标准多项式x8+x5+x4+1,依次对byte和seq做crc8校验 DatumData发送完后发送Data
3) Data: Data由5部分组成,分别为: ip_address(4 byte) + ap_password + [ap_ssid] 其中ap_ssid需要根据当前网络是否隐藏判断是否需要加入;如app上选择为隐藏才需要加入
4) DatumData和Data发送规则: 一组由3包组成,每组传送1字节有效数据,每包Length为9bit,每一组由如下格式数据组成:
control byte high 4 bits low 4 bits 1st 9bits 0x0 crc(high) data(high) 2nd 9bits 0x1 sequence header 3rd 9bits 0x0 crc(low) data(low) ① sequence header: 从0开始,每一组数据加1 ② ssid是否发送,需要根据当前网络是否为隐藏网络,如是隐藏网络则须发送ssid;否则不发送 ③ 每一包数据内的3个数据在组包完成后都须+40 4. ESP-TOUCH解码我们将手机连接上路由,在手机上通过安卓版Esp_touoch发包,并在PC上通过Wireshark抓包。其中路由器名称为“360wifi”,密码为“1234567890”。我们可以看到在Wireshark上抓到有规律的数据包: 1) GuideCode: 在设备上,我们接收到的实际数据包长度为557/556/555/554,按照编码规则对应515/514/513/512。所以,我们就可以获取到数据包基准值为554-512=42,这个基准值将用在后续解码中,非常重要,故必须先快速、准确的获取基准值。该基准值会应该路由器加密方式不同或者手机设备不同而不同。 l 基准值:42
2) DatumData与Data 正确获取到GuideCode的基准值后,我们在接收到余下的数据包后,将数据包长度减去基准值,并按照上诉编码规则反推。 我们将数据依次记录并整理成表格,如下所示: 减基准值前 (十进制格式显示) 减基准值后 (十进制格式显示) 减去序号40 (16进制格式显示) 解码结果 CRC8 序号 value 83/338/268 41/296/226 0x01/0x100/0xba 0x0b 0x00 0x1a 258/339/236 216/297/194 0xb0/0x101/0x9a 0xb9 0x01 0x0a 250/340/214 208/298/172 0xa8/0x102/0x84 0xa8 0x02 0x84 330/341/96 258/299/54 0xda/0x103/0x0e 0xd0 0x03 0xae 192/342/122 150/300/80 0x6e/0x104/0x28 0x62 0x04 0xe8 236/343/286 194/301/244 0x9a/0x105/0xcc 0x9c 0x05 0xac 227/344/264 185/302/222 0x91/0x106/0xb6 0x9b 0x06 0x16 86/345/97 44/303/55 0x04/0x107/0x0f 0x00 0x07 0x4f 162/346/132 120/304/90 0x50/0x108/0x32 0x53 0x08 0x02 197/347/163 155/305/121 0x73/0x109/0x51 0x75 0x09 0x31 277/348/116 235/306/74 0xc3/0x10a/0x22 0xc2 0x0a 0x32 165/349/213 123/307/171 0x53/0x10b/0x83 0x58 0x0b 0x33 261/350/166 219/308/124 0xb3/0x10c/0x84 0xb8 0x0c 0x34 117/351/327 75/309/285 0x23/0x10d/0xF5 0x2f 0x0d 0x35 229/352/216 187/310/174 0x93/0x10e/0x86 0x98 0x0e 0x36 85/353/121 43/311/79 0x03/0x10f/0x27 0x03 0x0f 0x37 277/354/186 235/312/144 0xc3/0x110/0x68 0xc6 0x10 0x38 165/355/283 123/313/241 0x53/0x111/0xc9 0x5c 0x11 0x39 85/356/274 43/314/232 0x03/0x112/0xc0 0x0c 0x12 0x30 5. ESP-TOUCH解码结果验证从上面的表格,我们正确的获取到Esp_Touch配置app发送的数据: ① totaldata_len:0x1a((5+4+10)+7) ② password_len:0x0a ③ ssid_crc8:0x84 ④ bssid_crc8:0xae ⑤ total_data xor:0xe8 ⑥ ip_address:”172.22.79.2” ⑦ ap_password:”1234567890”
手机ip_address EspTouch配置界面
由上可见,EspTouch解码结果与EspTouch发送app结果一致 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |